package com.inspinia.message.rpc.api;

import com.inspinia.base.pagination.Pager;
import com.inspinia.base.service.BaseService;
import com.inspinia.message.common.model.Notice;
import com.inspinia.message.common.model.NoticePush;
import com.inspinia.message.common.model.NoticePushVo;

import java.util.Collection;
import java.util.List;

/**
 * 通知推送的服务层接口
 * Created by heshun on 2018-1-8.
 */
public interface NoticePushService extends BaseService<NoticePush> {

    /**
     * 批量导入
     * @param noticeId
     * @param userIds
     * @return
     */
    List<Long> batchInsert(Long noticeId, Collection<Long> userIds);

    /**
     * 统计未读
     * @param userId
     * @return
     */
    int countUnread(Long userId);

    /**
     * 把消息设置为已读
     * @param id
     */
    void setToRead(Long id);

    /**
     * 根据用户展示未读
     * @param userId
     * @return
     */
    List<NoticePush> findUnread(Long userId);

    /**
     * 展示所有消息
     * @param vo
     * @return
     */
    Pager<Notice> findNotices(NoticePushVo vo);

    /**
     * 展示未读
     * @param vo
     * @return
     */
    Pager<Notice> listUnread(NoticePushVo vo);

    /**
     * 批量设置已读
     * @param ids
     */
    void batchSetToRead(Long[] ids);

    /**
     * 删除某天前的消息
     * @param day
     */
    void deleteDayBefore(int day);

    /**
     * 找出前n个未读的消息
     *
     * @param userId 用户id
     * @param topN   前n
     * @return
     */
    List<NoticePush> findTopNUnreadNoticeId(Long userId, int topN);

    /**
     * 全部消息设置为已读
     * @param userId
     */
    void readAll(Long userId);
}